/**
 *Project: jh-framework
 *File: cn.xkshow.lang.math.Unit.java 
 *Author: admin@xkshow.cn with the copyrite
 ****************************************************************
 *   VERSION       DATE            BY       CHANGE/COMMENT
 * --------------------------------------------------------------
 *    1.0        2013-3-27        xkshow.cn         create
 ****************************************************************
 *note: 组合计数
 ***************************************************************/ 
package cn.xkshow.lang.math;

public class Unit {
	
	/*
	 * 有1、2、3、4、5、6等六个数字;
	 * 要求构造一个数组，其中4不能放在第三位，“3”和“5”不能相连;
	 * 将所有可能情况输出.  (正确为396次)
	 */
	private static int total = 0;
	//递归实现的全排列
	private static void fullSort(int[] buf,int begin,int end){
		if(end-begin==1){
			return;
		}

		fullSort(buf, begin+1, end);

		if(begin==0){
			pout(begin+"bbb"+end,buf);
		}

		//swap
		for(int i=begin;i<end-1;i++){
			int obj = buf[begin];	
			buf[begin] = buf[i+1];	
			buf[i+1] = obj;	
			
			pout(begin+"bbb"+end,buf);				
			fullSort(buf,begin+1,end);	
			
			obj = buf[begin];	
			buf[begin] = buf[i+1];	
			buf[i+1] = obj;
		}
	}

	//输出满足条件的数据
	public static void pout(String prefix,int []buf){
		//其中4不能放在第三位
		if(buf[2] == 4){
			return;
		}

		//“3”和“5”不能相连
		for(int i=0;i<buf.length-1;i++){
			if((buf[i]==3&&buf[i+1]==5)||(buf[i]==5&&buf[i+1]==3)){	
				return;	
			}
		}

		for(int o:buf){
			System.out.print(o);
		}
		System.out.println();
		total++;
	}
	
	/*
	 * main
	 */
	public static void main(String[] args) {
		int [] buf = {1,2,3,4,5,6};
		fullSort(buf, 0, buf.length);
		System.out.println("总次数："+ total);
	}
	
}
